package org.infosys.system.service.impl;

import org.infosys.basic.service.impl.BaseServiceImpl;
import org.infosys.system.domain.Dictionarytype;
import org.infosys.system.mapper.DictionarydetailMapper;
import org.infosys.system.mapper.DictionarytypeMapper;
import org.infosys.system.service.IDictionarytypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class DictionarytypeServiceImpl extends BaseServiceImpl<Dictionarytype> implements IDictionarytypeService {

    @Autowired
    private DictionarytypeMapper dictionarytypeMapper;
    @Autowired
    private DictionarydetailMapper dictionarydetailMapper;

    /**
    * @Title: remove
    * @Description: 重写remove，需要在删除的时候同时删除从表的数据
    * @Author: hank
    * @Version: 1.0
    * @Date:  2022/6/30 15:16
    * @Parameters: [id]
    * @Return void
    */
    @Override
    @Transactional
    public void remove(Long id) {
        // 先删除从表数据
        dictionarydetailMapper.typesIdDel(id);
        // 再删除主表数据
        dictionarytypeMapper.remove(id);

    }

    /**
    * @Title: patchDel
    * @Description: 批量删除时也要同时删除从表数据
    * @Author: hank
    * @Version: 1.0
    * @Date:  2022/6/30 15:27
    * @Parameters: [ids]
    * @Return void
    */
    @Override
    public void patchDel(Long[] ids) {
        // 先删除从表数据
        dictionarydetailMapper.patchTypesIdDel(ids);
        // 再删除主表数据
        dictionarytypeMapper.patchDel(ids);

    }

    /**
    * @Title: save
    * @Description: 新增时先判断遍布是否已存在
    * @Author: hank
    * @Version: 1.0
    * @Date:  2022/6/30 15:40
    * @Parameters: [dictionarytype]
    * @Return void
    */
    @Override
    public void save(Dictionarytype dictionarytype) {
        List<Dictionarytype> dictionarytypes = dictionarytypeMapper.loadAll();
        // 判断编号是否存在，已经存在无法插入
        for (Dictionarytype dictionary: dictionarytypes){
            if (dictionary.getSn().equals(dictionarytype.getSn())) {
                throw new RuntimeException("编号已经存在，请修改编号");
            }
        }
        // 编号没有重复才可以新增
        dictionarytypeMapper.save(dictionarytype);
    }

    /** 
    * @Title: update
    * @Description: 修改时先判断遍布是否已存在
    * @Author: hank
    * @Version: 1.0
    * @Date:  2022/6/30 15:54  
    * @Parameters: [dictionarytype]
    * @Return void
    */
    @Override
    public void update(Dictionarytype dictionarytype) {
        List<Dictionarytype> dictionarytypes = dictionarytypeMapper.loadAll();
        // 先删除list中的元素
        for (int i = 0; i < dictionarytypes.size(); i++){
            if (dictionarytypes.get(i).getId().equals(dictionarytype.getId())) {
                dictionarytypes.remove(dictionarytypes.get(i));
            }
        }
        // 再判断其他的list对象的编号是否存在，已经存在无法修改
        for (Dictionarytype dictionary: dictionarytypes){
            if (dictionary.getSn().equals(dictionarytype.getSn())) {
                throw new RuntimeException("编号已经存在，请修改编号");
            }
        }
        // 编号没有重复才可以修改
        dictionarytypeMapper.update(dictionarytype);
    }

}
